www.gusucode.com > VC++ 多种窗体动画特效源码-源码程序 > VC++ 多种窗体动画特效源码-源码程序/code/MdiFrames.cpp
// MdiFrames.cpp : implementation file // Download by http://www.NewXing.com #include "stdafx.h" #include "TabWnd.h" #include "MdiFrames.h" #include "DummyTree.h" #include "DummyList.h" #include "DummyEdit.h" #include "DummyForm.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CSimpleViewFrame IMPLEMENT_DYNCREATE(CSimpleViewFrame, CMDIChildWnd) CSimpleViewFrame::CSimpleViewFrame() { } CSimpleViewFrame::~CSimpleViewFrame() { } BEGIN_MESSAGE_MAP(CSimpleViewFrame, CMDIChildWnd) //{{AFX_MSG_MAP(CSimpleViewFrame) ON_WM_DESTROY() //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CSimpleViewFrame message handlers BOOL CSimpleViewFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) { // TODO: Add your specialized code here and/or call the base class TVisualObject *pView = new TVisualObject(1,pContext,RUNTIME_CLASS(CDummyList)); m_Framework.Add(pView); return m_Framework.Create(this); //return CMDIChildWnd::OnCreateClient(lpcs, pContext); } void CSimpleViewFrame::OnDestroy() { CMDIChildWnd::OnDestroy(); // TODO: Add your message handler code here m_Framework.Destroy(); } ///////////////////////////////////////////////////////////////////////////// // CSplitterFrame IMPLEMENT_DYNCREATE(CSplitterFrame, CMDIChildWnd) CSplitterFrame::CSplitterFrame() { } CSplitterFrame::~CSplitterFrame() { } BEGIN_MESSAGE_MAP(CSplitterFrame, CMDIChildWnd) //{{AFX_MSG_MAP(CSplitterFrame) ON_WM_DESTROY() //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CSplitterFrame message handlers BOOL CSplitterFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) { // TODO: Add your specialized code here and/or call the base class // Simple splitter (1 row, 2 columns) TVisualObject *pSplitter = new TVisualObject(1,"Test", 1, 2, pContext); TVisualObject *pView1 = new TVisualObject(2,0,0,pContext, RUNTIME_CLASS(CDummyTree), CSize(150,0)); TVisualObject *pView2 = new TVisualObject(3,0,1,pContext, RUNTIME_CLASS(CDummyEdit), CSize(0,0)); m_Framework.Add(pSplitter); m_Framework.Add(pSplitter, pView1); m_Framework.Add(pSplitter, pView2); return m_Framework.Create(this); //return CMDIChildWnd::OnCreateClient(lpcs, pContext); } void CSplitterFrame::OnDestroy() { CMDIChildWnd::OnDestroy(); // TODO: Add your message handler code here m_Framework.Destroy(); } ///////////////////////////////////////////////////////////////////////////// // CSimpleTabFrame IMPLEMENT_DYNCREATE(CSimpleTabFrame, CMDIChildWnd) CSimpleTabFrame::CSimpleTabFrame() { } CSimpleTabFrame::~CSimpleTabFrame() { } BEGIN_MESSAGE_MAP(CSimpleTabFrame, CMDIChildWnd) //{{AFX_MSG_MAP(CSimpleTabFrame) ON_WM_DESTROY() //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CSimpleTabFrame message handlers BOOL CSimpleTabFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) { // TODO: Add your specialized code here and/or call the base class // Simple tab with 2 panes TVisualObject *pTab = new TVisualObject(1,"",pContext,RUNTIME_CLASS(TTabWnd)); TVisualObject *pTabView1 = new TVisualObject(2,"Cars",pContext,RUNTIME_CLASS(CDummyList)); TVisualObject *pTabView2 = new TVisualObject(3,"Fruits", pContext,RUNTIME_CLASS(CDummyTree)); m_Framework.Add(pTab); m_Framework.Add(pTab, pTabView1); m_Framework.Add(pTab, pTabView2); return m_Framework.Create(this); //return CMDIChildWnd::OnCreateClient(lpcs, pContext); } void CSimpleTabFrame::OnDestroy() { CMDIChildWnd::OnDestroy(); // TODO: Add your message handler code here m_Framework.Destroy(); } ///////////////////////////////////////////////////////////////////////////// // CSplitterTabFrame IMPLEMENT_DYNCREATE(CSplitterTabFrame, CMDIChildWnd) CSplitterTabFrame::CSplitterTabFrame() { } CSplitterTabFrame::~CSplitterTabFrame() { } BEGIN_MESSAGE_MAP(CSplitterTabFrame, CMDIChildWnd) //{{AFX_MSG_MAP(CSplitterTabFrame) ON_WM_DESTROY() //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CSplitterTabFrame message handlers BOOL CSplitterTabFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) { // TODO: Add your specialized code here and/or call the base class // Splitter (1 row, 2 columns). Second column is a tab with 2 panes TVisualObject *pSplitter = new TVisualObject(1,"Test", 1, 2, pContext); TVisualObject *pView1 = new TVisualObject(2,0,0,pContext, RUNTIME_CLASS(CDummyTree), CSize(150,0)); TVisualObject *pTab = new TVisualObject(3,0,1,pContext, RUNTIME_CLASS(TTabWnd), CSize(0,0)); TVisualObject *pTabView1 = new TVisualObject(4,"Cars",pContext,RUNTIME_CLASS(CDummyList)); TVisualObject *pTabView2 = new TVisualObject(5,"Fruits", pContext,RUNTIME_CLASS(CDummyTree)); m_Framework.Add(pSplitter); m_Framework.Add(pSplitter, pView1); m_Framework.Add(pSplitter, pTab); m_Framework.Add(pTab, pTabView1); m_Framework.Add(pTab, pTabView2); return m_Framework.Create(this); //return CMDIChildWnd::OnCreateClient(lpcs, pContext); } void CSplitterTabFrame::OnDestroy() { CMDIChildWnd::OnDestroy(); // TODO: Add your message handler code here m_Framework.Destroy(); } ///////////////////////////////////////////////////////////////////////////// // CTabSplitterFrame IMPLEMENT_DYNCREATE(CTabSplitterFrame, CMDIChildWnd) CTabSplitterFrame::CTabSplitterFrame() { } CTabSplitterFrame::~CTabSplitterFrame() { } BEGIN_MESSAGE_MAP(CTabSplitterFrame, CMDIChildWnd) //{{AFX_MSG_MAP(CTabSplitterFrame) ON_WM_DESTROY() //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CTabSplitterFrame message handlers BOOL CTabSplitterFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) { // TODO: Add your specialized code here and/or call the base class // Tab. First pane is edit view. Second pane is a splitter (1 row, 2 columns) TVisualObject *pTab = new TVisualObject(1,"",pContext,RUNTIME_CLASS(TTabWnd)); TVisualObject *pTabView1 = new TVisualObject(2,"Edit", pContext, RUNTIME_CLASS(CDummyEdit)); TVisualObject *pTabView2 = new TVisualObject(3,"Cars && Fruits", 1,2,pContext); TVisualObject *pView1 = new TVisualObject(4,0,0,pContext, RUNTIME_CLASS(CDummyTree),CSize(100,0)); TVisualObject *pView2 = new TVisualObject(5,0,1,pContext, RUNTIME_CLASS(CDummyList),CSize(0,0)); m_Framework.Add(pTab); m_Framework.Add(pTab, pTabView1); m_Framework.Add(pTab, pTabView2); m_Framework.Add(pTabView2, pView1); m_Framework.Add(pTabView2, pView2); return m_Framework.Create(this); //return CMDIChildWnd::OnCreateClient(lpcs, pContext); } void CTabSplitterFrame::OnDestroy() { CMDIChildWnd::OnDestroy(); // TODO: Add your message handler code here m_Framework.Destroy(); } ///////////////////////////////////////////////////////////////////////////// // CComplexFrameA IMPLEMENT_DYNCREATE(CComplexFrameA, CMDIChildWnd) CComplexFrameA::CComplexFrameA() { } CComplexFrameA::~CComplexFrameA() { } BEGIN_MESSAGE_MAP(CComplexFrameA, CMDIChildWnd) //{{AFX_MSG_MAP(CComplexFrameA) ON_WM_DESTROY() //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CComplexFrameA message handlers BOOL CComplexFrameA::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) { // TODO: Add your specialized code here and/or call the base class // Splitter (1 row, 2 columns). Second column is a nested splitter (2 rows, 1 columns). // First view is list view. Second view is a tab with 2 panes. TVisualObject *pSplitter = new TVisualObject(1,"Test", 1, 2, pContext); TVisualObject *pView1 = new TVisualObject(2,0,0,pContext, RUNTIME_CLASS(CDummyTree), CSize(150,0)); TVisualObject *pView2 = new TVisualObject(3,0,1,2,1,pContext); TVisualObject *pNestedView1 = new TVisualObject(4,0,0,pContext,RUNTIME_CLASS(CDummyList),CSize(0,70)); TVisualObject *pNestedView2 = new TVisualObject(5,1,0,pContext,RUNTIME_CLASS(TTabWnd),CSize(0,0)); TVisualObject *pPane1 = new TVisualObject(6,"Form", pContext, RUNTIME_CLASS(CDummyForm)); TVisualObject *pPane2 = new TVisualObject(7,"Edit", pContext, RUNTIME_CLASS(CDummyEdit)); pView1->SetHotKey('1'); pNestedView1->SetHotKey('2'); pPane1->SetHotKey('3'); pPane2->SetHotKey('4'); m_Framework.Add(pSplitter); m_Framework.Add(pSplitter, pView1); m_Framework.Add(pSplitter, pView2); m_Framework.Add(pView2, pNestedView1); m_Framework.Add(pView2, pNestedView2); m_Framework.Add(pNestedView2, pPane1); m_Framework.Add(pNestedView2, pPane2); return m_Framework.Create(this); //return CMDIChildWnd::OnCreateClient(lpcs, pContext); } void CComplexFrameA::OnDestroy() { CMDIChildWnd::OnDestroy(); // TODO: Add your message handler code here m_Framework.Destroy(); } ///////////////////////////////////////////////////////////////////////////// // CComplexFrameB IMPLEMENT_DYNCREATE(CComplexFrameB, CMDIChildWnd) CComplexFrameB::CComplexFrameB() { } CComplexFrameB::~CComplexFrameB() { } BEGIN_MESSAGE_MAP(CComplexFrameB, CMDIChildWnd) //{{AFX_MSG_MAP(CComplexFrameB) ON_WM_DESTROY() //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CComplexFrameB message handlers BOOL CComplexFrameB::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) { // TODO: Add your specialized code here and/or call the base class // Tab. First pane is another tab. Second pane is a view TVisualObject *pTab1 = new TVisualObject(1,"",pContext,RUNTIME_CLASS(TTabWnd)); TVisualObject *pTab2 = new TVisualObject(2,"Form && Edit", pContext,RUNTIME_CLASS(TTabWnd)); TVisualObject *pPane21 = new TVisualObject(3,"Form", pContext, RUNTIME_CLASS(CDummyForm)); TVisualObject *pPane22 = new TVisualObject(4,"Edit", pContext, RUNTIME_CLASS(CDummyEdit)); TVisualObject *pPane11 = new TVisualObject(5,"Cars", pContext, RUNTIME_CLASS(CDummyList)); pPane11->SetHotKey('1'); pPane21->SetHotKey('2'); pPane22->SetHotKey('3'); m_Framework.Add(pTab1); m_Framework.Add(pTab1, pPane11); m_Framework.Add(pTab1, pTab2); m_Framework.Add(pTab2, pPane21); m_Framework.Add(pTab2, pPane22); return m_Framework.Create(this); //return CMDIChildWnd::OnCreateClient(lpcs, pContext); } void CComplexFrameB::OnDestroy() { CMDIChildWnd::OnDestroy(); // TODO: Add your message handler code here m_Framework.Destroy(); } ///////////////////////////////////////////////////////////////////////////// // CComplexFrameC IMPLEMENT_DYNCREATE(CComplexFrameC, CMDIChildWnd) CComplexFrameC::CComplexFrameC() { } CComplexFrameC::~CComplexFrameC() { } BEGIN_MESSAGE_MAP(CComplexFrameC, CMDIChildWnd) //{{AFX_MSG_MAP(CComplexFrameC) ON_WM_DESTROY() //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CComplexFrameC message handlers BOOL CComplexFrameC::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) { // TODO: Add your specialized code here and/or call the base class // Tab. First pane is edit view. Second pane is a splitter (1 row, 2 columns) // First column is tree, second column is a tab. First pane is form, second pane // is a list TVisualObject *pTab1 = new TVisualObject(1,"",pContext,RUNTIME_CLASS(TTabWnd),TVisualObject::TOS_TABTOP); TVisualObject *pTabView1 = new TVisualObject(2,"Edit", pContext, RUNTIME_CLASS(CDummyEdit)); TVisualObject *pTabView2 = new TVisualObject(3,"Splitter",1,2,pContext); TVisualObject *pTabView3 = new TVisualObject(8,"Tree", pContext, RUNTIME_CLASS(CDummyTree)); TVisualObject *pSplitView1 = new TVisualObject(4,0,0,pContext,RUNTIME_CLASS(CDummyTree),CSize(100,0)); TVisualObject *pSplitView2 = new TVisualObject(5,0,1,pContext,RUNTIME_CLASS(TTabWnd),CSize(0,0),TVisualObject::TOS_TABBOTTOM); TVisualObject *pPane1 = new TVisualObject(6,"Form",pContext,RUNTIME_CLASS(CDummyForm)); TVisualObject *pPane2 = new TVisualObject(7,"List",pContext,RUNTIME_CLASS(CDummyList),TVisualObject::TOS_SELECTED); TVisualObject *pPane3 = new TVisualObject(9,"Tree",pContext,RUNTIME_CLASS(CDummyTree)); pTabView1->SetHotKey('1'); pSplitView1->SetHotKey('2'); pPane1->SetHotKey('3'); pPane2->SetHotKey('4'); pPane3->SetHotKey('5'); m_Framework.Add(pTab1); m_Framework.Add(pTab1,pTabView1); m_Framework.Add(pTab1,pTabView2); m_Framework.Add(pTab1,pTabView3); m_Framework.Add(pTabView2,pSplitView1); m_Framework.Add(pTabView2,pSplitView2); m_Framework.Add(pSplitView2,pPane1); m_Framework.Add(pSplitView2,pPane2); m_Framework.Add(pSplitView2,pPane3); return m_Framework.Create(this); //return CMDIChildWnd::OnCreateClient(lpcs, pContext); } void CComplexFrameC::OnDestroy() { CMDIChildWnd::OnDestroy(); // TODO: Add your message handler code here m_Framework.Destroy(); } ///////////////////////////////////////////////////////////////////////////// // CComplexFrameD IMPLEMENT_DYNCREATE(CComplexFrameD, CMDIChildWnd) CComplexFrameD::CComplexFrameD() { } CComplexFrameD::~CComplexFrameD() { } BEGIN_MESSAGE_MAP(CComplexFrameD, CMDIChildWnd) //{{AFX_MSG_MAP(CComplexFrameD) ON_WM_DESTROY() //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CComplexFrameD message handlers void CComplexFrameD::OnDestroy() { CMDIChildWnd::OnDestroy(); // TODO: Add your message handler code here m_Framework.Destroy(); } BOOL CComplexFrameD::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) { // TODO: Add your specialized code here and/or call the base class // Tab. First pane is edit view. Second pane is a splitter (1 row, 2 columns) // First column is tree, second column is a tab. First pane is form, second pane // is a list TVisualObject *pTab1 = new TVisualObject(1,"",pContext,RUNTIME_CLASS(TTabWnd),TVisualObject::TOS_TABTOP); TVisualObject *pTabView1 = new TVisualObject(2,"Edit", pContext, RUNTIME_CLASS(CDummyEdit)); TVisualObject *pTabView2 = new TVisualObject(3,"Splitter",1,2,pContext); TVisualObject *pTabView3 = new TVisualObject(8,"Tree", pContext, RUNTIME_CLASS(CDummyTree)); TVisualObject *pSplitView1 = new TVisualObject(4,0,0,pContext,RUNTIME_CLASS(CDummyTree),CSize(100,0)); TVisualObject *pNested = new TVisualObject(13,0,1,2,1,pContext); TVisualObject *pNestedPane = new TVisualObject(14,0,0,pContext,RUNTIME_CLASS(CDummyList),CSize(0,50)); TVisualObject *pSplitView2 = new TVisualObject(5,1,0,pContext,RUNTIME_CLASS(TTabWnd),CSize(0,0),TVisualObject::TOS_TABBOTTOM); TVisualObject *pSplitViewSplit = new TVisualObject(10,"Split",2,1,pContext); TVisualObject *pSplitViewSplit1 = new TVisualObject(11,0,0,pContext,RUNTIME_CLASS(CDummyEdit),CSize(0,100)); TVisualObject *pSplitViewSplit2 = new TVisualObject(12,1,0,pContext,RUNTIME_CLASS(CDummyForm),CSize(0,0)); TVisualObject *pPane1 = new TVisualObject(6,"Form",pContext,RUNTIME_CLASS(CDummyForm)); TVisualObject *pPane2 = new TVisualObject(7,"List",pContext,RUNTIME_CLASS(CDummyList),TVisualObject::TOS_SELECTED); TVisualObject *pPane3 = new TVisualObject(9,"Tree",pContext,RUNTIME_CLASS(CDummyTree)); pTabView1->SetHotKey('1'); pSplitView1->SetHotKey('2'); pPane1->SetHotKey('3'); pPane2->SetHotKey('4'); pPane3->SetHotKey('5'); pTabView1->SetDescription(_T("Edit view")); pTabView3->SetDescription(_T("Tree view")); pSplitView1->SetDescription(_T("Tree view within a splitter")); pPane1->SetDescription(_T("Form view as a tab within a splitter")); pPane2->SetDescription(_T("List view as a tab within a splitter")); pPane3->SetDescription(_T("Tree view as a tab within a splitter")); pSplitViewSplit1->SetDescription(_T("Edit view within a tab splitter")); pSplitViewSplit2->SetDescription(_T("Form view within a tab splitter")); pNestedPane->SetDescription(_T("List within a nested splitter")); m_Framework.Add(pTab1); m_Framework.Add(pTab1,pTabView1); m_Framework.Add(pTab1,pTabView2); m_Framework.Add(pTab1,pTabView3); m_Framework.Add(pTabView2,pSplitView1); m_Framework.Add(pTabView2,pNested); m_Framework.Add(pNested, pNestedPane); m_Framework.Add(pNested,pSplitView2); m_Framework.Add(pSplitView2,pPane1); m_Framework.Add(pSplitView2,pSplitViewSplit); m_Framework.Add(pSplitView2,pPane2); m_Framework.Add(pSplitView2,pPane3); m_Framework.Add(pSplitViewSplit, pSplitViewSplit1); m_Framework.Add(pSplitViewSplit, pSplitViewSplit2); if (m_Framework.Create(this)) { //m_Framework.SetActiveTab(pPane3); if (pPane3->IsTabPane()) pPane3->SetActiveTab(); return TRUE; } return FALSE; //return CMDIChildWnd::OnCreateClient(lpcs, pContext); }